/*
 * System.h
 *
 *  Created on: 21.05.2011
 *      Author: Tavin
 */

#ifndef SYSTEM_H_
#define SYSTEM_H_

#include "boolean.h"

enum modes { MODE_STARTUP,MODE_RUN_JVM,MODE_SYSTEM, MODE_REMOTE,MODE_LOAD, MODE_RECOVERY, MODE_TEST};


typedef struct{
	uint8_t accOn:1;
	uint8_t buzzerOn:1;
	uint8_t wirelesOn:1;
	uint8_t usbOn:1;
} ComponentStatus_t;



typedef struct{
	enum modes  	mode;
	uint8_t modeChangeCounter;
	ComponentStatus_t components;
} SystemData_t;



typedef struct{
	ComponentStatus_t components;
} SystemDataFlash_t;

extern SystemData_t SystemData;



void System_init();

void System_intemediateCheckModes();
void System_saveData();

/****************************************************************************************/
/*																						*/
/*	Function : System_setMode								Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.5.21			Status : Working   			*/
/*																						*/
/****************************************************************************************/

void static inline System_setMode(enum modes mode)
{
	SystemData.mode=mode;
}


/****************************************************************************************/
/*																						*/
/*	Function : System_getMode								Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.5.21			Status : Working   			*/
/*																						*/
/****************************************************************************************/

enum modes static inline System_getMode()
{
	return(SystemData.mode);
}



/****************************************************************************************/
/*																						*/
/*	Function : System_isAccOn									Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.5.22			Status : Working   			*/
/*																						*/
/****************************************************************************************/
boolean static inline System_isAccOn()
{
	if (SystemData.components.accOn==1)
			return(TRUE);

return(FALSE);
}


/****************************************************************************************/
/*																						*/
/*	Function : System_accOn									Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.5.22			Status : Working   			*/
/*																						*/
/****************************************************************************************/
void static inline System_accOn()
{
	SystemData.components.accOn=1;
}

/****************************************************************************************/
/*																						*/
/*	Function : System_accOff								Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.5.22			Status : Working   			*/
/*																						*/
/****************************************************************************************/

void static inline System_accOff()
{
	SystemData.components.accOn=0;
}



/****************************************************************************************/
/*																						*/
/*	Function : System_isBuzzerOn							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.5.22			Status : Working   			*/
/*																						*/
/****************************************************************************************/
boolean static inline System_isBuzzerOn()
{
	if (SystemData.components.buzzerOn==1)
			return(TRUE);

return(FALSE);
}


/****************************************************************************************/
/*																						*/
/*	Function : System_buzzerOn								Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.5.22			Status : Working   			*/
/*																						*/
/****************************************************************************************/
void static inline System_buzzerOn()
{
	SystemData.components.buzzerOn=1;
}

/****************************************************************************************/
/*																						*/
/*	Function : System_buzzerOff							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.5.22			Status : Working   			*/
/*																						*/
/****************************************************************************************/

void static inline System_buzzerOff()
{
	SystemData.components.buzzerOn=0;
}


/****************************************************************************************/
/*																						*/
/*	Function : System_isWirelessOn							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.5.22			Status : Working   			*/
/*																						*/
/****************************************************************************************/
boolean static inline System_isWirelessOn()
{
	if (SystemData.components.wirelesOn==1)
			return(TRUE);

return(FALSE);
}


/****************************************************************************************/
/*																						*/
/*	Function : System_wirelessOn							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.5.22			Status : Working   			*/
/*																						*/
/****************************************************************************************/
void static inline System_wirelessOn()
{
	SystemData.components.wirelesOn=1;
}

/****************************************************************************************/
/*																						*/
/*	Function : System_wirelessOff							Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.5.22			Status : Working   			*/
/*																						*/
/****************************************************************************************/

void static inline System_wirelessOff()
{
	SystemData.components.wirelesOn=0;
}


/****************************************************************************************/
/*																						*/
/*	Function : System_isUsbOn								Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.5.22			Status : Working   			*/
/*																						*/
/****************************************************************************************/
boolean static inline System_isUsbOn()
{
	if (SystemData.components.usbOn==1)
			return(TRUE);

return(FALSE);
}


/****************************************************************************************/
/*																						*/
/*	Function : System_usbOn									Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.5.22			Status : Working   			*/
/*																						*/
/****************************************************************************************/
void static inline System_usbOn()
{
	SystemData.components.usbOn=1;
}

/****************************************************************************************/
/*																						*/
/*	Function : System_usbOff								Author : OG					*/
/*																						*/
/*	Description : 								   										*/
/*																						*/
/*	Version : 1.0					Date :2011.5.22			Status : Working   			*/
/*																						*/
/****************************************************************************************/

void static inline System_usbOff()
{
	SystemData.components.usbOn=0;
}


#endif /* SYSTEM_H_ */
